# 练习使用Selenium自动化测试工具，驱动浏览器完成特定的动作，比如点击、下拉等。所有的动作都可以模拟。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# 1.创建webdriver对象，指定浏览器设置
chrome_options=Options()
chrome_options.page_load_strategy="normal" #normal默认：资源完全加载后 eager：DOMContentLoaded事件触发后返回 none:初始页面加载后
"""
常用参数：options.add_argment() --start-maximized, --headless=new and --user-data-dir=...
浏览器路径：options.binary_location=xxx
浏览器扩展：options.add_extension() 
保持打开状态：options.add_experimental_option("detach", True)
排除参数：options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
"""
driver = webdriver.Chrome()
# 2.发送url请求
driver.get("https://www.baidu.com")
# 3.获取浏览器信息
title = driver.title
# 4.建立等待策略
"""
隐式等待：
    driver.implicitly_wait(2)   查找元素时，等待2s
显式等待：更加灵活
    element = WebDriverWait(driver, 10).until(  
        EC.visibility_of_element_located((By.ID, "myElement"))
    查找的元素满足指定条件时（等待某个元素变得可见、可点击、出现在DOM中等），等待的时间

"""
element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID,"su")))  # 这顶元素可见的超时时间
# print(element)

driver.implicitly_wait(0.5)
# 5.查找元素
input_element = driver.find_element(By.ID, "kw")
# 6.操作元素、获取元素信息
"""
    支持鼠标、键盘的输入：Actions接口 https://www.selenium.dev/zh-cn/documentation/webdriver/actions_api/keyboard/
"""
print(input_element.get_property("name"))
# 7.结束会话
driver.quit()
